/**
 * 
 */
package baduga.server;

import java.util.Set;

import baduga.core.Core_Messages;

/**
 * @author Janek
 *
 */
public class Table_GameThread extends Thread {
	
	
	/**
	 * Określa etap gry
	 * 
	 * [0] - Rozpoczęcie gry
	 * [1] - Dealer
	 * [2] - Licytacja
	 * [3] - Wymiana Kart
	 * [4] - WynikLicytacji(???)
	 * [5] - Koniec gry 
	 * 
	 * 
	 */
	private int gameStage;
	
	
	
	/** Uchwyt do stołu */
	private Table handlTable;
	

	/** Informuje czy wątek śpi */
	private boolean sleepMarker = false;
	
	
	
	/**
	 * 
	 * Konstruktor
	 * 
	 */
	Table_GameThread(Table nHhandlTable)
	{
		this.handlTable = nHhandlTable;
		
		gameStage = 0;
	}
	
	
	
	
	/**
	 * Obsługuje grę
	 */
	public void game()
	{
		//Przygotowanie środowiska
		this.handlTable.prepareData();
		
		//Info o rozpoczęciu gry
		this.handlTable.broadcastTextEvent("", new Object[] {0x0340});
		
		
		//Dopóty nie zostanie przerwamy wątek lub nastąpi koniec gry
		while(!this.interrupted() && !this.handlTable.endGameTest())
		{
			
			//Dealer + SmallBlinds + BigBlinds
			this.handlTable.broadcastTextEvent("", new Object[] {0x0341});
			
			this.handlTable.setDealer();
			
			//Rozdanie Kart
			this.handlTable.broadcastTextEvent("", new Object[] {0x0342});
			
			
			//Rozesłanie kart do graczy
			this.handlTable.dealCardToAllPlayers();
			
			
			//Licytacje
			this.handlTable.broadcastTextEvent("", new Object[] {0x0343});
			
			
			//Looop ruchów graczy
			this.handlTable.moveLoop();
			
			
			//Wybór Kart
			this.handlTable.broadcastTextEvent("", new Object[] {0x0344});
			


		}
		
		if(this.handlTable.endGameTest())
		{
			this.handlTable.broadcastTextEvent("", new Object[] {0x0345});
			
			//Wydruk wyników
			this.handlTable.broadcastTextEvent("", new Object[] {0x0345});
		}
		
	}
	
	
	
	@Override
	/**
	 * 
	 * Inicjalizator podczas uruchomienia wątku
	 * 
	 */
	public void run()
	{
		game();
	}
	
	
	

	
	
	

	
	//------------------ [getters] - #START ------------------
	
	/**
	 * Zwraca aktualny etap gry
	 * 
	 * @return
	 */
	public int getGameStage()
	{
		return gameStage;
	}
	
	
	/**
	 * Pobiera informację czy wątek śpi
	 * 
	 * @return
	 */
	public boolean isSleep()
	{
		synchronized(this)
		{
			return this.sleepMarker;
		}
	}
	
	
	//------------------ [getters] - #END ------------------
	
	//------------------ [setters] - #START ------------------
	
	/**
	 * Ustawia GameState
	 * 
	 * <pre>
	 * [0] - Rozpoczęcie gry
	 * [1] - Dealer
	 * [2] - Licytacja
	 * [3] - Wymiana Kart
	 * [4] - WynikLicytacji(???)
	 * [5] - Koniec gry 
	 * </pre>
	 * 
	 * @param data
	 */
	public void setGameStage(final int data)
	{
		gameStage = data;
	}
	
	/**
	 * Ustawian Stan snu
	 * 
	 * @param state
	 */
	public void setSleep(final boolean state)
	{
		synchronized(this)
		{
			this.sleepMarker = state;
		}
	}
	
	
	//------------------ [setters] - #END ------------------

}
